﻿using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
namespace ECommerce.DAO.SQL.Productos
{
    public static class Familia
    {
        //Select Methods Helpers
        public static ECommerce.Model.Productos.Familia[] GetFamilias(string StoreProcedure, ECommerce.DAO.SQL.Parámetro[] Parámetros)
        {
            ECommerce.Model.Productos.Familia Familia = new ECommerce.Model.Productos.Familia();
            Type DynamicType = Familia.GetType();
            return ECommerce.DAO.SQL.Productos.Familia.GetFamiliasFromObjects(ECommerce.DAO.SQL.SqlHelper.Get(StoreProcedure, Parámetros, DynamicType));
        }
        public static ECommerce.Model.Productos.Familia[] GetFamiliasFromObjects(ECommerce.Model.Objeto[] Objetos)
        {
            List<ECommerce.Model.Productos.Familia> result = new List<ECommerce.Model.Productos.Familia>();
            ECommerce.Model.Productos.Familia Familia;
            foreach (ECommerce.Model.Objeto Objeto in Objetos)
            {
                Familia = new ECommerce.Model.Productos.Familia();
                Familia = (ECommerce.Model.Productos.Familia)Objeto;
                if (Familia != null)
                    if (Familia.Id != 0)
                        result.Add(Familia);
            }
            return result.ToArray();
        }

        //Select Methods
        public static ECommerce.Model.Productos.Familia GetFamiliaById(int Id)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Id);
            Parámetros.Add(Parámetro);
            ECommerce.Model.Productos.Familia[] Productos = ECommerce.DAO.SQL.Productos.Familia.GetFamilias("GetFamiliaById", Parámetros.ToArray());
            if (Productos != null)
                if (Productos.Length > 0)
                    return Productos[0];
            return null;
        }
        public static ECommerce.Model.Productos.Familia[] GetFamiliasDelSistema()
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            return ECommerce.DAO.SQL.Productos.Familia.GetFamilias("GetFamiliasDelSistema", Parámetros.ToArray());
        }
        public static ECommerce.Model.Productos.Familia[] GetFamiliasByProductoId(int IdProducto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new Parámetro("@Id", System.Data.SqlDbType.BigInt, IdProducto);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.Productos.Familia.GetFamilias("GetFamiliasByProductoId", Parámetros.ToArray());
        }
        public static ECommerce.Model.Productos.Familia[] GetFamiliasByFamiliaId(int FamiliaId)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new Parámetro("@Id", System.Data.SqlDbType.BigInt, FamiliaId);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.Productos.Familia.GetFamilias("GetFamiliasByIdMadre", Parámetros.ToArray());
        }
        public static ECommerce.Model.Productos.Familia[] GetFamiliasByCatálogoId(int CatálogoId)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new Parámetro("@Id", System.Data.SqlDbType.BigInt, CatálogoId);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.Productos.Familia.GetFamilias("GetFamiliasByCatálogoId", Parámetros.ToArray());
        }

        //Insert Methods
        public static int SetFamilia(ECommerce.Model.Productos.Familia Familia)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Familia.Id);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.SqlHelper.Insert("SetFamilia", Parámetros.ToArray());
        }
        public static void AddFamiliaToProducto(ECommerce.Model.Productos.Familia Familia, ECommerce.Model.Productos.Producto Producto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdProducto", System.Data.SqlDbType.BigInt, Producto.Id);
            Parámetros.Add(Parámetro);
            Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdFamilia", System.Data.SqlDbType.BigInt, Familia.Id);
            Parámetros.Add(Parámetro);
            ECommerce.DAO.SQL.SqlHelper.Insert("AddFamiliaToProducto", Parámetros.ToArray());
        }


        public static ECommerce.Model.Productos.Familia GetFamiliaMadre(ECommerce.Model.Productos.Familia Familia)
        {
            ECommerce.Model.Productos.Familia Madre = new ECommerce.Model.Productos.Familia();
            DataTable dt = new DataTable();
            using (SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Repuestos"].ConnectionString))
            {
                using (SqlCommand sqlComm = new SqlCommand("GetFamiliaMadreById"))
                {
                    sqlComm.CommandType = CommandType.StoredProcedure;
                    SqlParameter param = new SqlParameter();
                    param.SqlDbType = SqlDbType.BigInt;
                    param.Value = Familia.Id;
                    param.ParameterName = "@Id";
                    sqlComm.Parameters.Add(param);

                    sqlComm.Connection = sqlConn;
                    sqlConn.Open();
                    using (SqlDataReader dr = sqlComm.ExecuteReader())
                    {
                        dt.Load(dr);
                    }
                    foreach (DataRow dr in dt.Rows)
                    {
                        Madre.Load(dr);
                    }
                    sqlConn.Close();
                }
            }
            return Madre;
        }

    }
}
